#ifndef FFPLAYERQT_H
#define FFPLAYERQT_H
#include <QObject>
#include <queue>
#include "FFMediaPlayer.h"
/**
 * @brief QT与FFMediaPlay的中间层，防止破坏FFMediaPlay结构
 * @note qt ui的操作不能在别的线程里（只能通过信号与槽的方式）
 * @note 逻辑处理应该在这一层才对。不能直接让FFMediaPlayer有过多逻辑相关
 */
class FFplayerQt : public QObject
{
    Q_OBJECT
public:
    // 播放器事件
    enum PlayerEvent{
        FF_PLAY = 0,    // 播放事件
        FF_STOP,        // 停止事件
        FF_PUASE,       // 暂停事件
        FF_Duration,    // 总时长
    };

    struct AVMessage{

    };

public:
    FFplayerQt();
    ~FFplayerQt();

public:
    /**
     * @brief play: 播放
     * @param path: 播放路径
     */
    void play(QString path);

//public:
//    /**
//     * @brief 开启事件线程
//     */
//    void start();
//    /**
//     * @brief 中止事件循环
//     */
//    void abort();

//private:
//    /**
//     * @brief 插入事件
//     */
//    void pushEvent(PlayerEvent event);
//    /**
//     * @brief 获取事件
//     */
//    bool getEvent(PlayerEvent &event);
//    /**
//     * @brief 事件循环
//     */
//    void eventLoop();

signals:
    /**
     * @brief 发送事件
     * @param event: 事件类型
     */
    void sendEvent(PlayerEvent event);


private:
    bool isAbort;                       //中止标志
    FFMediaPlayer player;               //音乐播放器
    QString fileName;                   //播放文件名
//    queue<PlayerEvent> _queue;          //事件队列
//    mutex _mutex;                       //队列锁
//    condition_variable  _condition;     //内部信号量
};

#endif // FFPLAYERQT_H
